package com.atguigu.jxc.service;

import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.PurchaseList;
import com.atguigu.jxc.entity.ReturnList;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface GoodsService extends IService<Goods> {
    /**
     * 当前库存查询
     * @param page 第几页
     * @param rows 每页显示的数量
     * @param codeOrName 商品编码或名称
     * @param goodsTypeId  商品类别id
     * @return map
     */
    Map<String, Object> listInventory(Integer page, Integer rows, String codeOrName, Integer goodsTypeId);

    /**
     * 查询所有的商品分类
     * @return 返回list的json字符串
     */
    List<Map> loadGoodsType();

    /**
     * 查询所有商品单位
     * @return
     */
    Map<String, Object> unitList();

    /**
     * 新增分类
     * @param goodsTypeName
     * @param pId
     * @return
     */
    ServiceVO goodsTypeSave(String goodsTypeName, Integer pId);

    /**
     * 删除分类
     * @param goodsTypeId
     * @return
     */
    ServiceVO goodsTypeDelete(Integer goodsTypeId);

    /**
     * 商品添加或修改
     * @param goodsId
     * @param goods
     * @return
     */
    ServiceVO saveGoods(Integer goodsId, Goods goods);

    /**
     * 生成goodsCode
     * @return
     */
    String getCode();

    /**
     * 删除某个商品
     * @param goodsId
     * @return
     */
    ServiceVO deleteGoods(Integer goodsId);

    /**
     * 无或有库存商品列表展示（可以根据商品名称或编码查询）
     * @param page
     * @param rows
     * @param nameOrCode
     * @param flag 使用true或false, 标识查询有库存或无库存
     * @return
     */
    Map<String, Object> getNoOrHasInventoryQuantity(Integer page, Integer rows, String nameOrCode, Boolean flag);

    /**
     * 查询所有 当前库存量 小于 库存下限的商品信息
     * @return
     */
    Map<String, Object> listAlarm();


    /**
     * 进货单保存
     * @param purchaseNumber
     * @param purchaseList
     * @param purchaseListGoodsStr
     * @return
     */
    public ServiceVO savePurchaseList(String purchaseNumber, PurchaseList purchaseList, String purchaseListGoodsStr);

    /**
     * 退货单保存
     * @param returnNumber
     * @param returnList
     * @param returnListGoodsStr
     * @return
     */
    ServiceVO saveReturnListGoods(String returnNumber, ReturnList returnList, String returnListGoodsStr);
    /**
     * 退货单列表展示（可条件查询：单据号模糊、供应商、是否付款和日期区间）
     * @param returnNumber
     * @param supplierId
     * @param state
     * @param sTime
     * @param eTime
     * @return
     */
    Map<String, Object> getReturnListList(String returnNumber, Integer supplierId, Integer state, String sTime, String eTime);

    /**
     * 增加对应商品的库存 inventory_quantity
     * @param goodsId
     * @param goodsNum
     */
//    void addInventoryQuantity(Integer goodsId, Integer goodsNum);

    /**
     * 更新采购价格
     * @param goodsId
     * @param purchasingPrice
     */
//    void updatePurchasingPrice(Integer goodsId, double purchasingPrice);

    /**
     * 更新商品状态
     * @param goodsId
     * @param state
     */
//    void updateGoodsState(Integer goodsId, Integer state);
}
